// 异步编程
// 内容：
// 1. 同步会阻塞程序运行
// 2. 使用 Future 异步处理
// 3. Future 链式调用
// 4. 使用 async await

import 'dart:io';

void main(){
  print('start');
  // getNetworkData().then((result){
  //   print(result);
  // });
  
  // getNetworkData().then((result){
  //   print(result);
  // }).catchError((error){
  //   print(error);
  // });

  doLogin();

  print('end');
}

// 同步会阻塞程序运行
// getNetworkData(){
//   sleep(Duration(seconds: 2));
//   print('data');
// }

// 使用 Future 异步处理
// getNetworkData(){
//   return Future((){
//     sleep(Duration(seconds: 2));
//     return 'data';
//   });
// }

// Future 链式调用
getNetworkData(){
  return Future((){
    sleep(Duration(seconds: 2));
    throw Exception('网络异常');
  });
}


// 4. 使用 async await 优化异步操作
// 场景：登录，用户信息
login() {
  return Future(() {
    sleep(Duration(seconds: 2));
    return 'token-10086';
  });
}

getUserInfo() {
  return Future(() {
    sleep(Duration(seconds: 3));
    return 'Jack 18';
  });
}

// 使用 async await
doLogin() async {
  String token = await login();
  print(token);
  String info = await getUserInfo();
  print(info);
}
